#ifndef SH_CHAIN_H_
#define SH_CHAIN_H_

#include "SH_Cell.h"


class SH_Cell;

enum SH_Purpose {
	SH_PurposeInit,
	SH_PurposeSearch,
	SH_PurposeAction,
};


class SH_Chain {
public:
	SH_Chain(int _direction = 0);
	~SH_Chain();

	// Метод связывания
	void setCell(SH_Cell *c);
	
	// Метод запуска цепочки на выполнение
	void run(SH_Purpose p, SH_Cell *cell = 0);


private:

	// Не изменется после инициализации 
	int direction;
	
	// Не изменяется в рамках run()
	SH_Purpose purpose;
	
	// Изменяются на каждый step()
	int resource;
	SH_Cell *cell;
	SH_State state;
	SH_State freqState;
	
	// Записываемое в данный момент значение (действ. только при SH_PurposeAction)
	int value;
	
	// Второй проход (действ. только при SH_PurposeSearch)
	bool second;
	
	bool step();
	
};

#endif /*SH_CHAIN_H_*/
